package com.pengpeng.common.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 自定义校验注解
 */
@Documented  //用于指示编译器将被它修饰的注解的信息包含在生成的API文档中，使用@Documented注解修饰的注解将会被包含在API文档中，这对于开发者在使用API时提供了更多的信息
@Constraint(validatedBy = { ListValueConstraintValidator.class })  //使用哪些自定义校验器校验
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })  //表明该注解可以标注在哪些位置
@Retention(RUNTIME)  //触发时机：运行时触发
public @interface ListValue {

    /**
     * JSR303规范中规定：自定义校验注解必须拥有以下三个属性
     *      message：提示信息
     *      groups：分组校验
     *      Payload：负载信息
     * @return
     */
    String message() default "{com.pengpeng.common.valid.ListValue.message}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

    int[] vals() default { };
}
